home *** CD-ROM | disk | FTP | other *** search
/ Pascal Super Library / Pascal Super Library (CW International)(1997).bin / SWAG / SWAGA_C / ARCHIVES.SWG / 0020_Identify Archive Formats.pas < prev    next >
Pascal/Delphi Source File  |  1994-08-24  |  1KB  |  87 lines

  1.  
  2. {$define ARJ}
  3. {$define ZIP}
  4. {$define ARC}
  5. {$define LZH}
  6. {$define ZOO}
  7.  
  8. function  IdentifyArchive(const Name:string):char;
  9. {
  10.   returns:
  11.     '?': unknown archive
  12.     'A': Arj-archive;
  13.     'Z': Zip-archive
  14.     'L': Lzh-archive
  15.     'C': Arc-archive
  16.     'O': Zoo-archive
  17. }
  18. var       f:PBufStream;
  19.           a:array[0..10] of char;
  20.           bc:word;
  21.           s:string;
  22. begin
  23.   IdentifyArchive:='?';
  24.   if Name='' then
  25.     exit;
  26.  
  27.   f:=New(PBufStream,Init(Name,stOpenRead,1024));
  28.   if f^.Status<>stOk then
  29.   begin
  30.     Dispose(f,Done);
  31.     exit;
  32.   end;
  33.  
  34.   f^.Read(a,sizeof(a));
  35.   if f^.Status<>stOk then
  36.   begin
  37.     Dispose(f,Done);
  38.     exit;
  39.   end;
  40.   Dispose(f,Done);
  41.  
  42. {$ifdef arj}
  43.   if (a[0]=#$60) and (a[1]=#$EA) then
  44.   begin
  45.     IdentifyArchive:='A';  { ARJ }
  46.     exit;
  47.   end;
  48. {$endif}
  49.  
  50. {$ifdef zip}
  51.   if (a[0]='P') and (a[1]='K') then
  52.   begin
  53.     IdentifyArchive:='Z';  { ZIP }
  54.     exit;
  55.   end;
  56. {$endif}
  57.  
  58. {$ifdef arc}
  59.   if a[0]=#$1A then
  60.   begin
  61.     IdentifyArchive:='C';  { ARC }
  62.     exit;
  63.   end;
  64. {$endif}
  65.  
  66. {$ifdef zoo}
  67.   if (a[0]='Z') and (a[1]='O') and (a[2]='O') then
  68.   begin
  69.     IdentifyArchive:='O';  { ZOO }
  70.     exit;
  71.   end;
  72. {$endif}
  73.  
  74. {$ifdef lzh}
  75.   s:=Name;
  76.   for bc:=1 to length(s) do
  77.     s[bc]:=upcase(s[bc]);
  78.   if copy(s,pos('.',s),4)='.LZH' then
  79.   begin
  80.     IdentifyArchive:='L';  { LZH }
  81.     exit;
  82.   end;
  83. {$endif}
  84.  
  85.   IdentifyArchive:='?';
  86. end;
  87.